import config from '@/config/index'
/**
 * url反序列化
 * @param str 如:http://172.19.24.113:3080/#/task/taskCenter?token=02c0d6a8d5c74cf18282fd911f18d9c2
 * @returns {{path: string, getUrl: (function(): string), protocol: string, file: string, port: string | string, param, anchor: null, host: string, href: string, hash}}
 */
export const urlParse = str => {
    const param = {}
    const hash = {}
    let anchor = null
    const url = str || location.href
    const arr = /([^?]*)([^#]*)(.*)/.exec(url)
    // eslint-disable-next-line
  let ar1 = /(.*:)?(?:\/?\/?)([\.\w]*)(:\d*)?(.*?)([^\/]*)$/.exec(arr[1]);// eslint-disable-next-line
  let ar2 = arr[2].match(/[^?&=]*=[^?&=]*/g);
    const ar3 = arr[3].match(/[^#&=]*=[^#&=]*/g)

    if (ar2) {
        for (let i = 0, l = ar2.length; i < l; i++) {
            const ar22 = /([^=]*)(?:=*)(.*)/.exec(ar2[i])
            param[ar22[1]] = ar22[2]
        }
    }

    if (ar3) {
        for (let i = 0, l = ar3.length; i < l; i++) {
            const ar33 = /([^=]*)(?:=*)(.*)/.exec(ar3[i])
            hash[ar33[1]] = ar33[2]
        }
    }

    if (arr[3] && !/[=&]/g.test(arr[3])) {
        anchor = arr[3]
    }

    function getUrl() {
        const that = this
        const url = []
        const param = []
        const hash = []

        url.push(
            that.protocol,
            (that.protocol && '//') || ' ',
            that.host,
            that.port,
            that.path,
            that.file
        )

        for (const p in that.param) {
            param.push(p + '=' + that.param[p])
        }

        for (const p in that.hash) {
            hash.push(p + '=' + that.hash[p])
        }

        url.push((param.length && '?' + param.join('&')) || ' ')

        if (that.anchor) {
            url.push(that.anchor)
        } else {
            url.push((hash.length && '#' + hash.join('&')) || '')
        }

        return url.join(' ')
    }

    return {
        href: arr[0],
        protocol: ar1[1],
        host: ar1[2],
        port: ar1[3] || ' ',
        path: ar1[4],
        file: ar1[5],
        param: param,
        hash: hash,
        anchor: anchor,
        getUrl: getUrl,
    }
}

/**
 * @description Redirect Login Page
 */
export function redirectLogin() {
    window.location.href = config.loginUrl
}

/**
 * @description Get Token
 * @return {String}
 */
export function getToken() {
    return getCookie('token')
}

/**
 * @description Remove Token
 */
export function removeToken() {
    delCookie('token')
}

/**
 * 读取cookies
 */
export const getCookie = name => {
    let arr
    const reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)')
    if ((arr = document.cookie.match(reg))) return arr[2]
    else return ''
}

/**
 * 删除cookies
 */
export const delCookie = name => {
    const exp = new Date()
    exp.setTime(exp.getTime() - 1)
    const cval = getCookie(name)
    if (cval != null) {
        document.cookie = name + '=' + cval + ';expires=' + exp.toGMTString()
    }
}

// /**
//  * 小数转百分比保留n位小数
//  * @param point 如0.38888888888888884
//  * @param n
//  * @returns {string} 如38.88%
//  */
// export const toPercent = (point, n = 2) => {
//   var str = Number(point * 100).toFixed(n)
//   str += "%"
//   return str
// }

// /**
//  * 四舍五入保留n位小数不足补0
//  * @param num 如0.38888888888888884
//  * @param n 需要保留的小数位数，默认4
//  * @returns {string|boolean} 0.3889｜false--错误返回
//  */
// export const keepNDecimalFull = (num, n = 4) => {
//   var result = parseFloat(num)
//   if (isNaN(result)) {
//     return false
//   }
//   result = Math.round(num * Math.pow(10, n)) / Math.pow(10, n)
//   var s_x = result.toString()
//   var pos_decimal = s_x.indexOf('.')
//   if (pos_decimal < 0) {
//     pos_decimal = s_x.length
//     s_x += '.'
//   }
//   while (s_x.length <= pos_decimal + n) {
//     s_x += '0'
//   }
//   return s_x
// }
//
// /**
//  * 获取一天24时的时刻 23.59的时间戳 精确到秒
//  * @param d 默认当天
//  * @returns {Date}
//  */
// export const endOfDay = (d) => {
//   let end = null
//   if (d) {
//     end = new Date(
//         new Date(new Date(d).toLocaleDateString()).getTime() +
//         24 * 60 * 60 * 1000 -
//         1 * 1000
//     ).getTime()
//   } else {
//     end = new Date(
//         new Date(new Date().toLocaleDateString()).getTime() +
//         24 * 60 * 60 * 1000 -
//         1 * 1000
//     ).getTime()
//   }
//   return end
// }
//
// /**
//  * 获取一天0时的时刻 0.0.0的时间戳
//  * @param d 默认当天
//  * @returns {Date}
//  */
// export const startOfDay = (d) => {
//   let start = null
//   if (d === 'weekAgo') {
//     start = new Date(new Date(endOfDay() - 7 * 24 * 60 * 60 * 1000 - 1000).toLocaleDateString()).getTime()
//   } else if (d) {
//     start = new Date(new Date(d).toLocaleDateString()).getTime()
//   } else {
//     start = new Date(new Date().toLocaleDateString()).getTime()
//   }
//   return start
// }

// /**
//  * 删除左右两端的空格
//  * @param str
//  * @returns {string | * | void}
//  */
// function trim(str) {
//   return str.replace(/(^\s*)|(\s*$)/g, "");
// }
//
// /**
//  * 删除左边的空格
//  * @param str
//  * @returns {string | * | void}
//  */
// function ltrim(str) {
//   return str.replace(/(^\s*)/g, "");
// }
//
// /**
//  * 删除右边的空格
//  * @param str
//  * @returns {string | * | void}
//  */
// function rtrim(str) {
//   return str.replace(/(\s*$)/g, "");
// }
//
// /**
//  * 过滤非法字符串
//  * @param str
//  * @returns {boolean}
//  */
// export const illegalFilter = str => {
//   let regEn = /[`~!@#$%^&*()_+<>?:"{},.\/;'[\]]/im;
//   let regCn = /[·！#￥（——）：；“”‘、，|《。》？、【】[\]]/im;
//
//   if (regEn.test(str) || regCn.test(str)) return false;
//   return true;
// };
